3.4.4 Debug set文
実機で実行することはできない。
code:文法
また、Debug get文と異なり、<dtype>の指定はない。
<payload>は書き込むデータの内容を、 16 進 16 桁で表記した 1 長語を単位として必要な長語数分並べて書
く。
長語データの表記にはいくつかのシンタックスシュガーがある。これら必要な長語数およびシンタックスシュガーについての詳細は後述する。 効果
指定したデータを、指定したメモリ要素・アドレスに書き込む。
<payload>に書くべき長語の数は、<memory>によって決まるペイロード語長に語数 num_of_wordsを掛けたものである。 実際に書かれた長語の数がそれと異なっているとエラーになる。
可能なメモリ要素とアクセス語長の指定、またそれに対応するペイロード語長を表3.2に列挙する。 ここに示したとおり、アクセス語長が単語の際にはペイロード語長がアクセス語長より長くなる。 このとき、ペイロードは長語ごとにLSB側の単語は無視され、MSB側の単語が書き込まれる。 table:表3.3 Debug set文で書き込み可能なメモリ要素と語長の組み合わせ
<memory> メモリ要素 アクセス語長 ペイロード語長
表 3.4 にそれぞれの記法の説明と例を示す。
1 行の中で 16 進長語・単語・半語整数は混在できるが、16 進 16 桁整数は他の記法とは混在できない。
<num_of_words>は<memory>で指定したアクセス語長を単位として<addr>から何語を書き込むかを 10 進数で指定する。
エラー
<payload>を先頭から解釈していき、表 3.4 に示した記法のいずれにも当てはまらないものがあるとエラーとなる
<memory>とnum_of_wordsによって決まるペイロードの長語数と実際のの長さが異なる場 合エラーとなる
<payload>に現れる数がその記法における固定または最大の桁数を超えている場合エラーとなる
table:表3.4 Debug set文で書き込む長語データの記法。例は全ての記法で同一の値となる。 16 進長語・単語・半語整数の例では固定長でないため先頭に 0 は不要となっている。また、いずれも符号あり整数は使用不可である
記法名 記法 例
16進16桁整数 固定長 16 桁の 16 進数 0123456789abcdef 16進長語整数 lの後に 1 つの最大 16 桁の 16 進数 l123456789abcdef 16進単語整数 sの後に_区切りの 2 つの最大 8 桁の 16 進数 s1234567_89abcdef 16進半語整数 hの後に_区切りの 4 つの最大 4 桁の 16 進数 h123_4567_89ab_cdef code:例 1
d set $lm0n0c0b0m0p0 2 h1_2_3_4h5_6_7_8
d set $lm4n0c0b0m0p0 2 laabblccdd
d set $lm8n0c0b0m0p0 2 l4321hf_e_d_c
d get $lm0n0c0b0m0p0 6
code:txt(py)
DEBUG-LM0(n0c0b0m0p0,0):(f:0,i:{{0x1,0x2},{0x3,0x4}},v:0x1000200030004) #d get $lm0n0c0b0m0p0 6 DEBUG-LM0(n0c0b0m0p0,2):(f:0,i:{{0x5,0x6},{0x7,0x8}},v:0x5000600070008) #d get $lm0n0c0b0m0p0 6 DEBUG-LM0(n0c0b0m0p0,4):(f:0,i:{{0x0,0x0},{0x0,0xAABB}},v:0xAABB) #d get $lm0n0c0b0m0p0 6 DEBUG-LM0(n0c0b0m0p0,6):(f:0,i:{{0x0,0x0},{0x0,0xCCDD}},v:0xCCDD) #d get $lm0n0c0b0m0p0 6 DEBUG-LM0(n0c0b0m0p0,8):(f:0,i:{{0x0,0x0},{0x0,0x4321}},v:0x4321) #d get $lm0n0c0b0m0p0 6 DEBUG-LM0(n0c0b0m0p0,10):(f:0,i:{{0xF,0xE},{0xD,0xC}},v:0xF000E000D000C) #d get $lm0n0c0b0m0p0 6 code:例 2
d set $lr0n0c0b0m0p0 2 s1_2s3_4
d get $lr2n0c0b0m0p0 1
code:txt(py)
DEBUG-GREG0(c0b0m0p0,2):(f:0,i:{{0x0,0x3},{0x0,0x4}},v:0x300000004) #d get $lr2n0c0b0m0p0 1 命令 1 行目では$lr0から2長語分書き込んでおり、最初の1長語には1_2が、次の 1 長語には3_4が書き込まれる。
命令 2 行目では$lr2、すなわち$lr0から1長語進んだアドレスから読み出しているので、結果は単語の3と4が並んだ値となる。
code:例 3
d set $m0n0c0b0m0p0 2 h1_2_3_4h5_6_7_8
d get $lm0n0c0b0m0p0 2
ペイロード語長がアクセス語長より長く、各長語のLSB側が捨てられる例。
アクセス語長は単語のため、2単語=1長語しか書き込みは行われない。よって、2長語目は0となる。
code:txt(py)
DEBUG-LM0(n0c0b0m0p0,0):(f:0,i:{{0x1,0x2},{0x5,0x6}},v:0x1000200050006) #d get $lm0n0c0b0m0p0 2 DEBUG-LM0(n0c0b0m0p0,2):(f:0,i:{{0x0,0x0},{0x0,0x0}},v:0x0) #d get $lm0n0c0b0m0p0 2 code:例 4
d set $tn0c0b0m0p01 123456789abcdef0
d get $lltn0c0b0m0p0 4
d set $lltn0c0b0m0p02 111122223333444455556666777788889999aaaabbbbccccddddeeeeffff0000
d get $lltn0c0b0m0p0 4
1行目では1サイクル分の2長語エントリのMSB側1 長語に、3行目では2サイクル分の2長語エントリ全体に、それぞれ書き込んでいる
Debug get文による読み出しは2行目と4行目で同一で、2長語エントリ×4サイクル分全体を読み出している。
code:txt(py)
DEBUG-TREG(n0c0b0m0p0,0):{(f:5.62635e-221,i:{{0x1234,0x5678},{0x9ABC,0xDEF0}},v:0 x123456789ABCDEF0), (f:0,i:{{0x0,0x0},{0x0,0x0}},v:0x0)} #d get $lltn0c0b0m0p0 4 DEBUG-TREG(n0c0b0m0p0,1):{(f:0,i:{{0x0,0x0},{0x0,0x0}},v:0x0), (f:0,i:{{0x0,0x0},{0x0,0x0}},v:0x0)} #d get $lltn0c0b0m0p0 4 DEBUG-TREG(n0c0b0m0p0,2):{(f:0,i:{{0x0,0x0},{0x0,0x0}},v:0x0), (f:0,i:{{0x0,0x0},{0x0,0x0}},v:0x0)} #d get $lltn0c0b0m0p0 4 DEBUG-TREG(n0c0b0m0p0,3):{(f:0,i:{{0x0,0x0},{0x0,0x0}},v:0x0), (f:0,i:{{0x0,0x0},{0x0,0x0}},v:0x0)} #d get $lltn0c0b0m0p0 4 DEBUG-TREG(n0c0b0m0p0,0):{(f:1.80811e-226,i:{{0x1111,0x2222},{0x3333,0x4444}},v:0x1111222233334444), (f:1.19826E+103,i:{{0x5555,0x6666},{0x7777,0x8888}},v:0x5555666677778888)} #d get $lltn0c0b0m0p0 4 DEBUG-TREG(n0c0b0m0p0,1):{(f:-2.35957e-185, i:{{0x9999,0xAAAA},{0xBBBB,0xCCCC}},v:0x9999AAAABBBBCCCC), (f:-1.46007E+144,i:{{0xDDDD,0xEEEE},{0xFFFF,0x0}},v:0xDDDDEEEEFFFF0000)} #d get $lltn0c0b0m0p0 4 DEBUG-TREG(n0c0b0m0p0,2):{(f:0,i:{{0x0,0x0},{0x0,0x0}},v:0x0), (f:0,i:{{0x0,0x0},{0x0,0x0}},v:0x0)} #d get $lltn0c0b0m0p0 4 DEBUG-TREG(n0c0b0m0p0,3):{(f:0,i:{{0x0,0x0},{0x0,0x0}},v:0x0), (f:0,i:{{0x0,0x0},{0x0,0x0}},v:0x0)} #d get $lltn0c0b0m0p0 4